package com.lap.framework.generator.shared.tool;

import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Collectors;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

/**
 * 文件工具
 *
 * @author Shuisheng Lao(劳水生)
 * @version 0.0.1
 */
@Slf4j
@UtilityClass
public class FileUtil {

  /**
   * 获取源文件目录
   *
   * @param filePath 文件路径
   * @param fileName 文件名称
   * @return 文件源目录
   */
  public static String resolvePath(String filePath, String fileName) {
    // 使用 Paths 类来构建路径，更简洁且线程安全
    String baseDir = System.getProperty("user.dir");
    return Paths.get(baseDir, Constant.OUT, Constant.JAVA_SOURCE, filePath, fileName).toString();
  }

  public static String resolveFile(String ext, String... fileName) {
    // 1. 参数校验
    if (StringUtils.isBlank(ext)) {
      throw new IllegalArgumentException("扩展名不能为空或空白");
    }

    // 处理 fileName 为 null 的情况
    if (fileName == null) {
      throw new IllegalArgumentException("文件名组件不能为 null");
    }

    // 2. 拼接文件名组件（过滤空值）
    String namePart =
        Arrays.stream(fileName).filter(Objects::nonNull).collect(Collectors.joining());

    // 3. 检查拼接结果
    if (namePart.isBlank()) {
      throw new IllegalArgumentException("无法生成有效的文件名");
    }

    // 4. 返回规范化的文件名
    return namePart + "." + ext.trim();
  }

  /**
   * 获取文件名
   *
   * @param fileName 文件名
   * @param prefix 文件前缀
   * @param suffix 文件后缀
   * @return 文件
   */
  public static String resolveFileName(String fileName, String prefix, String suffix) {
    StringBuilder sb = new StringBuilder(64);
    if (StringUtils.isNotBlank(prefix)) sb.append(prefix);

    sb.append(fileName);

    if (StringUtils.isNotBlank(suffix)) sb.append(suffix);

    return sb.toString();
  }
}
